(function() {
    // 定义一个定位的变量
    let site = "absolute";
    // 封装有关Snake的函数
    function Snake(option) {
        option = option instanceof Object ? option : {}
        Object.assign(this, option);
        //确定蛇身的方块位置
        this.body = [
            { x: 3, y: 2, color: Tools.getColor() },
            { x: 2, y: 2, color: 'skyblue' },
            { x: 1, y: 2, color: 'skyblue' },
        ];
        // 确定蛇的初始位置
        this.direction = 'right';
        // 定义空数组接受创建的组成蛇的方块元素
        this.element = [];

    };
    //Snake渲染页面的函数
    Snake.prototype.render = function(map) {
        for (let i = 0, len = this.body.length; i < len; i++) {
            //创建组成蛇的元素
            const ele = document.createElement('div');
            // 根据数组的每一项数据生成新的元素
            const per = this.body[i];
            //蛇的对应样式
            ele.style.width = this.width + 'px';
            ele.style.height = this.height + 'px';
            ele.style.backgroundColor = per.color;
            ele.style.position = site;
            ele.style.left = per.x * this.width + 'px';
            ele.style.top = per.y * this.height + 'px';
            // 渲染到指定的父级元素中
            map.appendChild(ele);
            // 将新的元素添加到数组中
            this.element.push(ele);
        }
    };
    // Snake 的运动
    Snake.prototype.move = function() {
        // 蛇身每一节都要变成上一节
        for (var i = this.body.length - 1; i > 0; i--) {
            this.body[i].x = this.body[i - 1].x;
            this.body[i].y = this.body[i - 1].y
        }
        // 存储头部的位置
        var head = this.body[0];
        switch (this.direction) {
            case "right":
                head.x += 1;
                break;
            case "left":
                head.x -= 1;
                break;
            case "top":
                head.y -= 1;
                break;

            case "bottom":
                head.y += 1;
                break;
        };

    };
    //因为调用move函数后,需要通过render函数来进行渲染,
    // 相当于又往数组中添加了新的元素,造成了多余元素.所以得清除上一次生成的元素
    Snake.prototype.remove = function(map) {
        for (let i = this.element.length - 1; i >= 0; i--) {
            map.removeChild(this.element[i]);
        }
        this.element = [];
    };
    window.Snake = Snake;
})();